import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);
const debug = process.env.NODE_ENV !== "production";

import cookie from "@/utils/store/cookie";
import {
  getUserInfo,
  getUser
} from "@/api/user";
import dialog from "@/utils/dialog";

const loginKey = "login_status";

const vuexStore = new Vuex.Store({
  state: {
    // 是否已经在授权页面
    isAuthorizationPage: false,
    // 是否授权
    isAuthorization: false,
    // 不建议从这里取 token，但是删除掉会影响其他的页面
    token: cookie.get(loginKey) || null,
    userInfo: cookie.get('userInfo'),
    $deviceType: null,
    location: {
      latitude: '',
      longitude: ''
    },
    storeItems: cookie.get("storeItems") || null,
    goName: cookie.get("goName") || "",
    tabBar: [{
        "pagePath": "/pages/index/index",
        "text": "会员",
        "iconPath": "/static/icon-home.png",
        "selectedIconPath": "/static/icon-home-hot.png",
        "num": 0,
        "isDot": false,
        "verify": true
      },
      {
        "pagePath": "",
        "text": "",
        "iconPath": "/static/icon-scan.png",
        "hump": true,
        "verify": true,
        "selectedIconPath": "/static/icon-scan.png"
      },
      {
        "pagePath": "/pages/user/UserV2/index",
        "text": "我的",
        "iconPath": "/static/icon-user.png",
        "selectedIconPath": "/static/icon-user-hot.png",
        "num": 0,
        "isDot": true,
        "verify": true
      }
    ],
    tabBarIndex: 0
  },
  mutations: {
    login(state, token, expires_time) {
      state.token = token;
      cookie.set(loginKey, token, expires_time);
    },
    changeTabBar(state, payload) {
      if (payload) {
        state.tabBarIndex = payload.index
      }
    },
    logout(state) {
      console.log('清除数据')
      state.token = null;
      state.userInfo = null
      cookie.clearAll()
    },
    backgroundColor(state, color) {
      state.color = color;
      // document.body.style.backgroundColor = color;
    },
    updateUserInfo(state, userInfo) {
      state.userInfo = userInfo;
      if (userInfo) {
        cookie.set('userInfo', userInfo)
      } else {
        cookie.set('userInfo', null)
      }
    },
    updateAuthorizationPage(state, isAuthorizationPage) {
      state.isAuthorizationPage = isAuthorizationPage;
    },
    updateAuthorization(state, isAuthorization) {
      state.isAuthorization = isAuthorization;
    },
    updateDevicetype(state, $deviceType) {
      state.$deviceType = $deviceType;
    },
    setLocation(state, location) {
      state.location = location
    },
    get_store(state, storeItems) {
      state.storeItems = storeItems;
      cookie.set("storeItems", storeItems);
    },
    get_to(state, goName) {
      state.goName = goName;
      cookie.set("goName", goName);
    }
  },
  actions: {
    getLocation({
      state,
      commit
    }, force) {
      uni.getLocation({
        type: 'gcj02',
        success: function(res) {
          console.log(res)
          commit("setLocation", {
            longitude: res.longitude,
            latitude: res.latitude,
          });
        }
      });
    },
    userInfo({
      state,
      commit
    }, force) {
      if (state.userInfo !== null && !force) {
        return Promise.resolve(state.userInfo);
      }
      return new Promise(reslove => {
        getUserInfo().then(res => {
          commit("updateUserInfo", res.data);
          reslove(res.data);
        });
      }).catch(() => {
        uni.showToast({
          title: "获取信息失败!",
          icon: "none",
          duration: 2000,
        });
      });
    },
    getUser({
      state,
      commit
    }) {
      if (!state.token) {
        return Promise.reject('未获取到token');
      }
      return new Promise(reslove => {
        getUserInfo().then(res => {
          console.log(res)
          commit("updateUserInfo", res.data);
          reslove(res.data);
        });
      }).catch((error) => {
        console.log(error)
        uni.showToast({
          title: "获取信息失败!",
          icon: "none",
          duration: 2000,
        });
      });
    },
    changeLogin({
      state,
      commit
    }, data, date) {
      commit("login", data, date);
    },
    setUserInfo({
      state,
      commit
    }, user) {

      commit("updateUserInfo", user);
    },
    changeAuthorizationPage({
      state,
      commit
    }, index) {
      commit("updateAuthorizationPage", index);
    },
    changeAuthorization({
      state,
      commit
    }, index) {
      commit("updateAuthorization", index);
    },
  },
  getters: {
    isAuthorizationPage: state => state.isAuthorizationPage,
    isAuthorization: state => state.isAuthorization,
    token: state => state.token,
    isLogin: state => !!state.token,
    userInfo: state => state.userInfo || {},
    location: state => state.location,
    storeItems: state => state.storeItems,
    goName: state => state.goName,
    $deviceType: state => state.$deviceType,
  },
  strict: debug
});

export default vuexStore
